Skip to main content

Camera APIs

Camera APIs provide comprehensive functionality for photo capture, permission management, and error handling in universal apps.

Camera APIs

Comprehensive camera functionality for universal apps with photo capture, permission management, and error handling.

useCamera() Hook

Main hook for camera functionality including photo capture, permission handling, and state management.

PropertyTypeDescription
datarequiredObject | nullCaptured photo data object containing fileSrc (base64/path), fileName, size, mimeType, transport method, and metadata.
loadingrequiredbooleanOperation in progress state, true during photo capture, permission requests, or processing.
errorObject | nullStandardized error object with code, category, message, details, recoverable flag, and suggested action.
progressObjectDetailed progress tracking with state, phase, message, percentage, transport method, and byte counts.
isWebbooleanEnvironment detection flag, true when running in web browser context.
isNativebooleanEnvironment detection flag, true when running in native app (iOS/Android) context.
executerequired(operation?: string, options?: Object) => voidPrimary function to trigger operations: execute("takePhoto"), execute("requestPermission"), or execute("checkPermission").
clear() => voidClear data and reset all state (data, error, progress) to initial values.
clearError() => voidClear only the error state while preserving data and other states.
permissionObjectCamera permission status object with status, canRequest flag, and lastChecked timestamp.
photostring | nullLegacy alias for data - Base64 encoded image data (backward compatibility).
takePhoto() => voidLegacy alias for execute("takePhoto") - Function to trigger camera capture (backward compatibility).
clearPhoto() => voidLegacy alias for clear() - Function to clear photo state (backward compatibility).

useCameraPermission() Hook

Automatically requests and manages camera permission status with loading states.

PropertyTypeDescription
permissionrequiredstring | nullCurrent camera permission status: GRANTED, DENIED, NOT_DETERMINED, RESTRICTED. Updates automatically when permissions change.

requestCameraPermission() Function

Promise-based function for explicit camera permission requests with async/await support.

PropertyTypeDescription
ParametersvoidNo parameters required. Function automatically requests camera permission from the system.
ReturnsPromise<string>Promise that resolves with permission status (GRANTED) or rejects with error message if permission denied/failed.

Platform & Device Behavior

Camera API behavior varies across different platforms and device types. See detailed breakdown below.

PlatformStatusBehaviorNotes
🤖 Android Emulator✅ SupportedCamera works with virtual camera. Photos captured from emulator camera interface.Uses Android Virtual Device camera simulation
🤖 Android Physical✅ SupportedFull camera functionality with device hardware camera. High-quality photo capture.Requires camera permission. Works with front/back cameras.
🍎 iOS Simulator✅ SupportedCamera works with simulated camera interface. Stock photos available for testing.Uses iOS Simulator camera simulation with sample images
🍎 iOS Physical⏳ Coming SoonPhysical device camera support currently in development.Will support device hardware camera when implemented
🌐 Web Browser🔄 FallbackReturns safe defaults. Camera functions available but no actual camera access.Graceful degradation for web platform compatibility

📸 Avatar Photo Capture Example

Capture and display user avatars with real-time camera access and state management

🎛️ Customize Your Example

Select which hooks and properties to include in your example. All hooks follow a common interface with standardized properties and operations.

AvatarCapture.js
1import React from 'react';
2import { useCamera } from "catalyst-core/hooks";
3
4function CameraApp() {
5 const {
6 // New standardized interface
7 data: photoData,
8 execute: executeCamera
9 } = useCamera();
10
11 const formatFileSize = (bytes) => {
12 if (bytes === 0) return '0 Bytes'
13 const k = 1024
14 const sizes = ['Bytes', 'KB', 'MB', 'GB']
15 const i = Math.floor(Math.log(bytes) / Math.log(k))
16 return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
17 }
18
19 return (
20 <div style={{ padding: '20px' }}>
21 <h2>📷 Camera Demo</h2>
22
23 {/* Camera Controls */}
24
25 <button onClick={executeCamera} >
26 "Take Photo"
27 </button>
28 </div>
29
30 {photoData && (
31 <div>
32 <h3>Photo Captured!</h3>
33 <p>Name: {photoData.fileName}</p>
34 <p>Size: {formatFileSize(photoData.size)}</p>
35 <img src={photoData.fileSrc} alt="Captured" style={{ maxWidth: '300px' }} />
36
37 </div>
38 )}
39 </div>
40 );
41}
42
43export default CameraApp;

Important Notes

  • Platform Support: Android (emulator + physical) and iOS (simulator) supported. iOS physical device coming soon
  • Parameters: Camera functions require no parameters - all configuration is handled automatically
  • Emulator/Simulator: Camera works in Android emulator and iOS simulator with virtual/sample images
  • Permissions: Always check permission status before capturing photos - required on physical devices
  • Data Format: Photos returned as base64 JPEG strings ready for immediate display or upload
  • Error Handling: Built-in error handling for permission denied, camera unavailable, and capture failures
  • Web Fallback: Returns safe defaults when running in web mode for graceful degradation